import request from '../../utils/homework/request.js'

/**
 * 教师发布作业题目，并上传相关附件文件
 * @param {Object} problem - 作业题目信息对象
 * @param {MultipartFile[]} files - 上传的附件文件数组
 * @returns {Promise} 插入操作影响的记录数
 */
export function insertHomeworkProblem(problem, files) {
  const formData = new FormData()
  // 追加作业题目信息
  Object.keys(problem).forEach(key => {
    formData.append(key, problem[key])
  })
  // 追加文件
  if (files && files.length > 0) {
    files.forEach(file => {
      formData.append('files', file)
    })
  }
  return request({
    url: 'homework/insertHomeworkProblem',
    method: 'post',
    data: formData
  })
}

/**
 * 根据教师ID查询该教师发布的所有作业题目
 * @param {String} teacherId - 教师唯一标识符
 * @returns {Promise} 作业题目列表
 */
export function getHomeworkProblemByUserNum(userNum) {
  return request({
    url: 'homework/getHomeworkProblemByUserNum',
    method: 'get',
    params: { userNum }
  })
}

/**
 * 根据作业题目ID查询所有学生提交的作业结果
 * @param {String} problemId - 作业题目唯一标识符
 * @returns {Promise} 作业提交结果列表
 */
export function getHomeworkResultByProblemId(problemId) {
  return request({
    url: 'homework/getHomeworkResultByProblemId',
    method: 'get',
    params: { problemId }
  })
}

/**
 * 学生提交作业结果，并上传相关附件文件
 * @param {Object} result - 作业结果信息对象
 * @param {MultipartFile[]} files - 上传的附件文件数组
 * @returns {Promise} 插入操作影响的记录数
 */
export function insertHomeworkResult(result, files) {
  const formData = new FormData()
  // 追加作业结果信息
  Object.keys(result).forEach(key => {
    formData.append(key, result[key])
  })
  // 追加文件
  if (files && files.length > 0) {
    files.forEach(file => {
      formData.append('files', file)
    })
  }
  return request({
    url: 'homework/insertHomeworkResult',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

/**
 * 根据作业题目ID和学生学号查询特定学生的作业提交结果
 * @param {Integer} problemId - 作业题目唯一标识符
 * @param {String} studentNum - 学生学号
 * @returns {Promise} 作业提交结果对象
 */
export function getHomeworkResult(problemId, studentNum) {
  return request({
    url: 'homework/getHomeworkResult',
    method: 'get',
    params: { problemId, studentNum }
  })
}

/**
 * 更新作业评分、教师评语以及批改时间
 * @param {Long} score - 作业得分
 * @param {String} tComment - 教师评语
 * @param {String} correctTime - 批改时间
 * @param {Integer} resultId - 作业结果唯一标识符
 * @returns {Promise} 更新操作影响的记录数
 */
export function updateHomeworkScoreAndTCommentAndCorrectTime(score, tComment, resultId) {
  return request({
    url: 'homework/updateHomeworkScoreAndTCommentAndCorrectTime',
    method: 'post',
    params: { score, tComment, resultId }
  })
}

/**
 * 根据班级ID查询该班级下的所有作业题目
 * @param {Long} classId - 班级唯一标识符
 * @returns {Promise} 作业题目列表
 */
export function getHomeworkProblemByClassId(classId) {
  return request({
    url: 'homework/getHomeworkProblemByClassId',
    method: 'get',
    params: { classId }
  })
}

/**
 * 根据作业结果ID查询该作业结果的所有附件文件信息
 * @param {Integer} resultId - 作业结果唯一标识符
 * @returns {Promise} 附件文件列表
 */
export function getHomeworkResultFileByResultId(resultId) {
  return request({
    url: 'homework/getHomeworkResultFileByResultId',
    method: 'get',
    params: { resultId }
  })
}

/**
 * 根据作业题目ID查询该作业题目的所有附件文件信息
 * @param {Integer} problemId - 作业题目唯一标识符
 * @returns {Promise} 附件文件列表
 */
export function getHomeworkProblemFileByProblemId(problemId) {
  return request({
    url: 'homework/getHomeworkProblemFileByProblemId',
    method: 'get',
    params: { problemId }
  })
}